﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjetoJVA.localhostTurma;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Net;


namespace ProjetoJVA
{
    public partial class AlterarTurmaTela : Form
    {
        private Turma altTurma;
        private List<Funcionario> funcAntigos = new List<Funcionario>();
        private Turma novaTurma;
        private Serie serie;
        private Funcionario funcionario;
        private List<Funcionario> listaFuncionarios;
        private Service1 serviçoTurma = new Service1();
        private ListViewItem professor;

        public AlterarTurmaTela(Turma turma)
        {
            this.altTurma = turma;
            InitializeComponent();
        }

        private void NovaTurmaTela_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.FixedDialog;
            preencherCampos();
            carregarFuncs();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void botaoOk_Click(object sender, EventArgs e)
        {
            alterar();
        }

        private void botaoAdicionarProf_Click(object sender, EventArgs e)
        {
            professor = new ListViewItem();
            Int32 indice;
            string itemComboBox;

            if (comboBoxProfessores.SelectedIndex <= -1)
            {
                MessageBox.Show("Nenhum professor(a) selecionado(a)!!!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                comboBoxProfessores.Focus();
                return;
            }
            else
            {
                List<Funcionario> listaFuncionarios = serviçoTurma.listarFuncionarios().ToList();
                indice = comboBoxProfessores.SelectedIndex;
                itemComboBox = comboBoxProfessores.Items[indice].ToString();
                professor = listViewProfessores.Items.Add(listaFuncionarios[indice].MatFunc.ToString());
                professor.SubItems.Add(listaFuncionarios[indice].NomeFunc);
                professor.SubItems.Add(listaFuncionarios[indice].Disciplina.Nome);
            }
        }

        private void comboBoxProfessores_Click(object sender, EventArgs e)
        {
            listaFuncionarios = new List<Funcionario>();
            serviçoTurma = new Service1();

            comboBoxProfessores.Items.Clear();

            listaFuncionarios.Clear();

            try
            {
                listaFuncionarios = serviçoTurma.listarFuncionarios().ToList();

                foreach (var funcionario in listaFuncionarios)
                {
                    comboBoxProfessores.Items.Add(funcionario.MatFunc + " - " + funcionario.NomeFunc + " - " + funcionario.Disciplina.Nome);
                }
            }
            catch (SoapException ex)
            {
                var message = ex.Message;

                message = message.Remove(0, message.LastIndexOf("--->"));

                message = message.Remove(0, message.IndexOf(":") + 1);

                if (message.IndexOf('\n') >= 0)
                {

                    message = message.Remove(message.IndexOf('\n'));
                }

                MessageBox.Show(message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        

        public void preencherCampos()
        {
            campoDescricao.Text = altTurma.DescTurma;
            campoSerie.Text = altTurma.Serie.DescSerie;
            campoQtdAlunosMax.Text = altTurma.QtdAlunosMax.ToString();
            campoTurno.Text = altTurma.TurnoTurma;

            try
            {
                List<Funcionario> listaProfessores = serviçoTurma.pesquisarProfessor(altTurma).ToList();
                for (int i = 0; i < listaProfessores.Count; i++)
                {
                    ListViewItem linha = listViewProfessores.Items.Add(listaProfessores[i].MatFunc.ToString());
                    linha.SubItems.Add(listaProfessores[i].NomeFunc);
                    linha.SubItems.Add(listaProfessores[i].Disciplina.Nome);
                }
            }
            catch (SoapException ex)
            {
                var message = ex.Message;

                message = message.Remove(0, message.LastIndexOf("--->"));

                message = message.Remove(0, message.IndexOf(":") + 1);

                if (message.IndexOf('\n') >= 0)
                {

                    message = message.Remove(message.IndexOf('\n'));
                }

                MessageBox.Show(message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void botaoRemoverProf_Click(object sender, EventArgs e)
        {
            try
            {
                listViewProfessores.SelectedItems[0].Remove();
            }
            catch (ArgumentOutOfRangeException)
            {
                MessageBox.Show("Nenhum professor selecionado!");
            }
        }

        public void alterar()
        {
            try
            {
                Turma antiga = altTurma;
                antiga.Funcionarios = funcAntigos.ToArray();

                Turma nova = new Turma();
                nova.CodTurma = antiga.CodTurma;
                nova.DescTurma = antiga.DescTurma;
                nova.QtdAlunosMax = antiga.QtdAlunosMax;
                nova.Serie = antiga.Serie;
                nova.TurnoTurma = antiga.TurnoTurma;
                List<Funcionario> lista = new List<Funcionario>();

                for (int i = 0; i < listViewProfessores.Items.Count; i++)
                {
                    Funcionario func = new Funcionario();
                    func.MatFunc = Convert.ToInt32(listViewProfessores.Items[i].SubItems[0].Text);
                    func.NomeFunc = listViewProfessores.Items[i].SubItems[1].Text;

                    lista.Add(func);
                }

                nova.Funcionarios = lista.ToArray();

                serviçoTurma.alterarTurma(antiga, nova);
                MessageBox.Show("Alterado com sucesso!");
            }
            catch (SoapException ex)
            {
                var message = ex.Message;

                message = message.Remove(0, message.LastIndexOf("--->"));

                message = message.Remove(0, message.IndexOf(":") + 1);

                if (message.IndexOf('\n') >= 0)
                {

                    message = message.Remove(message.IndexOf('\n'));
                }

                MessageBox.Show(message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void carregarFuncs()
        {
            for (int i = 0; i < listViewProfessores.Items.Count; i++)
			{
                Funcionario func = new Funcionario();
                func.MatFunc = Convert.ToInt32(listViewProfessores.Items[i].SubItems[0].Text);
                funcAntigos.Add(func);
			}
            
        }
    }
}
